home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 7944 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  3.7 KB

  1. Path: ix.netcom.com!netnews
  2. From: miker3@ix.netcom.com (Mike Rubenstein)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: What is &Variable (declared as: char Variable[10])?
  5. Date: Thu, 29 Feb 1996 20:46:43 GMT
  6. Organization: Netcom
  7. Message-ID: <31361078.89905707@nntp.ix.netcom.com>
  8. References: <4gqpa1$3h9@alcor.usc.edu> <1996Feb26.211807.28858@isac.hces.com> <31331a38.54160408@nntp.ix.netcom.com> <1996Feb28.195423.10465@isac.hces.com>
  9. NNTP-Posting-Host: ix-dc12-23.ix.netcom.com
  10. X-NETCOM-Date: Thu Feb 29 12:46:44 PM PST 1996
  11. X-Newsreader: Forte Agent .99d/32.182
  12.  
  13. gg@isac.hces.com (Greg Goodrich) wrote:
  14.  
  15. > Mike Rubenstein (miker3@ix.netcom.com) wrote:
  16. > : gg@isac.hces.com (Greg Goodrich) wrote:
  17. > : > Abu Wawda (wawda@alcor.usc.edu) wrote:
  18. > : > : I'm having trouble understanding what the address of a static array
  19. > : > : is. For example, if I declare a variable called myarray as:
  20. > : > :     char myarray[10];
  21. > : > : then what could &myarray possibly mean? myarray is not a pointer, so
  22. > : > : &myarray could not possibly be the address of the variable myarray
  23. > : > : (like it would be if I did char* myarray and then asked for &myarray).
  24. > : > 
  25. > : > : Functions such as scanf() allow the following:
  26. > : > 
  27. > : > :     char myarray[10];
  28. > : > 
  29. > : > :     scanf("%s",&myarray);
  30. > : > 
  31. > : > : but I don't understand what scanf() could possibly be taking in the
  32. > : > : second parameter. It can't be: char** since myarray is not a
  33. > : > : pointer. I CAN understand how the following would work:
  34. > : > 
  35. > : > This is because C treats the occurrence of array names as the address of
  36. > : > the array.  Therefore the following are equivalent:
  37. > : > 
  38. > : >     scanf("%s", myarray);
  39. > : >     scanf("%s", &myarray);
  40. > : > 
  41. > : > The thing is, the address is implied when you use an array name.  This
  42. > : > is not so for pointers.  I am not sure why C was incorporated in this
  43. > : > way.  In my humble opinion, it would make it easier and clearer to force
  44. > : > the programmer to put the & in front of array names, the same as you
  45. > : > have to do for any other storage class.
  46. > : No.  The are not equivalent.  The first is legal and the second is
  47. > : not.
  48. > : The %s format item in scanf expects a pointer to char.  myarray is
  49. > : converted to a pointer to char so it is legal.  &myarray is a pointer
  50. > : to array of 10 char and is not converted.  This results in undefined
  51. > : behavior.
  52. > : In many implementations pointer to char and pointer to array of 10
  53. > : char have the same representation and this will work properly, but
  54. > : this is not required by the standard.
  55. > I would like to see an example of how this could be implemented to fail.
  56. > They both point to the exact same memory address, the only difference
  57. > being the datatype of the value, which can be type casted if necessary.
  58. > If you have an array, the address of the array is also the address of
  59. > the first member of the array, because the array itself is not a
  60. > pointer, but a reference.  The same goes for a structure.  The address
  61. > of a struct is the same as the address of the first member of the
  62. > struct, but of different data type.  One is pointer to struct and the
  63. > other is pointer to whatever the first member is declared as, but they
  64. > are both pointers, and therefore are the same size.
  65.  
  66. Let me urge you to stop asking such questions.  The fact that the
  67. standard says it is illegal is sufficient.  Guessing whether there is
  68. an implementation in which it fails is fruitless since even if there
  69. is not someone might write one tomorrow.
  70.  
  71. In any case, I find it hard to justify code based on lack of
  72. imagination.
  73.  
  74. The construction is likely to fail in any implementation in which
  75. sizeof(char*) != sizeof(char (*) 10) or in which they have different
  76. representations.
  77.  
  78. Michael M Rubenstein
  79.